package DataStructure.BinaryTreePra;

/**
 * @time: 2021/12/14/014 15:40
 * @author: Zhurunhe
 * @Version：1
 */
public class ArrBInaryTree {
    public static void main(String[] args) {
        /**
         * 数组模拟二叉树查找
         */
        int[] arr = {1, 2, 3, 4, 5, 6, 7};
        String type="pos";
        print(arr,type);


    }

    public static void print(int[] arr, String type) {
        if (arr.length > 0) {
            if (type != null) {
                if (type.equals("pre")) {
                    preOrder(arr, 0);//1245367
                } else if (type.equals("mid")) {
                    midOrder(arr, 0);//4251637
                } else if (type.equals("pos")) {
                    posOrder(arr, 0);//4526731
                }
            }
        } else {
            System.out.println("数组为空，不能进行遍历");
        }
    }

    //遍历数组 以二叉树方式遍历数组 前序查找
    public static void preOrder(int[] arr, int index) {
        System.out.println(arr[index]);
        //节点的左子节点的下标 2n+1
        if ((index * 2 + 1) < arr.length) {
            preOrder(arr, (index * 2 + 1));
        }
        //节点的右子节点的下标 2n+2
        if ((index * 2 + 2) < arr.length) {
            preOrder(arr, (index * 2 + 2));
        }
    }
    //遍历数组 以二叉树方式遍历数组 中序查找
    public static void midOrder(int[] arr, int index) {

        //节点的左子节点的下标 2n+1
        if ((index * 2 + 1) < arr.length) {
            midOrder(arr, (index * 2 + 1));
        }
        System.out.println(arr[index]);
        //节点的右子节点的下标 2n+2
        if ((index * 2 + 2) < arr.length) {
            midOrder(arr, (index * 2 + 2));
        }
    }
    //遍历数组 以二叉树方式遍历数组 后序查找
    public static void posOrder(int[] arr, int index) {

        //节点的左子节点的下标 2n+1
        if ((index * 2 + 1) < arr.length) {
            posOrder(arr, (index * 2 + 1));
        }
        //节点的右子节点的下标 2n+2
        if ((index * 2 + 2) < arr.length) {
            posOrder(arr, (index * 2 + 2));
        }
        System.out.println(arr[index]);
    }
}
